#include<iostream>
#include<gtest/gtest.h>
#include<unordered_map>

/*
    独立测试套件 
        可以定义成员变量 测试里可以访问 TEST_F 测试的名字必须与套件环境名一致
    写两个静态函数 SetUpTestCase   TearDownTestCase

    假设有全局的测试数据容器 在SetUpTestCase插入公共的测试数据
    在SetUp 插入每个单元测试独立的测试数据
    TearDown每个单元测试结束就调用一次 清除独立数据
    TearDownTestCase 所有单元测试结束自动调用
*/

class MyTest : public testing::Test
{
public:
    static void SetUpTestCase() 
    {
        std::cout << "所有单元测试前执行， 初始化总环境" << std::endl;
    }
    virtual void SetUp() override
    {
        std::cout << "单元测试执行前的环境初始化" << std::endl;
        _mymap.insert(std::make_pair("hello", "你好"));
        _mymap.insert(std::make_pair("bye", "再见"));
    }
    virtual void TearDown() override
    {
        std::cout << "单元测试执行完毕后的环境清理" << std::endl;
        _mymap.clear();
    }
    static void TearDownTestCase() 
    {
        std::cout << "所有单元测试完毕执行， 清理总环境" << std::endl;
    }
public:
    std::unordered_map<std::string, std::string> _mymap;

};

TEST_F(MyTest, insert_test)
{
    _mymap.insert(std::make_pair("111", "222"));

    ASSERT_EQ(_mymap.size(), 3); //equal
}

TEST_F(MyTest, size_test)
{
    ASSERT_EQ(_mymap.size(), 2); //equal
}

int main(int argc, char* argv[])
{
    testing::InitGoogleTest(&argc, argv);

    RUN_ALL_TESTS();
    
    return 0;
}
